package capaPersistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import data.Cesta;
import data.Par;

public class CompraDAO {

	public boolean addCompra(Cesta cesta, String id, Connection connection) {
		try {

			/* para cada producto en la cesta con su cantidad */
			for (Par par : cesta) {
				String queryString = "SELECT cantidad FROM Compra "
						+ "WHERE usuario=? AND producto=?";
				PreparedStatement preparedStatement = connection
						.prepareStatement(queryString);

				/* Fill "preparedStatement". */
				preparedStatement.setString(1, id);
				preparedStatement.setString(2, par.getProducto().getId());
				/* Execute query. */
				ResultSet rs = preparedStatement.executeQuery();

				int cnt = 0;
				/* Si da resultado -> Aumentar la cantidad */
				if (rs.next()) {
					cnt = rs.getInt(1);

					cnt += par.getCantidad();

					/* update de esta compra */
					String queryString2 = "UPDATE  Compra " + "SET  cantidad=? "
							+ "WHERE usuario=? AND producto=?";

					PreparedStatement preparedStatement2 = connection
							.prepareStatement(queryString2);

					/* Fill "preparedStatement". */
					preparedStatement2.setInt(1, cnt);
					preparedStatement2.setString(2, id);
					preparedStatement2.setString(3, par.getProducto().getId());

					
					int updatedRows = preparedStatement2.executeUpdate();

					/* Si no se updateo 1 row -> Error */
					if (updatedRows != 1) {
						throw new SQLException(
								"Problemas actualizando cantidades de compra");
					}

					// ELSE: update correcto -> Seguimos
				}

				/* No da resultados -> Introducimos nueva compra */
				else {
					String queryString2 = "INSERT INTO Compra "
							+ "(usuario,producto,cantidad) VALUES (?,?,?)";

					PreparedStatement preparedStatement2 = connection
							.prepareStatement(queryString2);

					/* Fill "preparedStatement". */
					preparedStatement2.setString(1, id);
					preparedStatement2.setString(2, par.getProducto().getId());
					preparedStatement2.setInt(3, par.getCantidad());

					/* Execute query. */
					int insertedRows = preparedStatement2.executeUpdate();

					/* Si no se inserto una -> Error */
					if (insertedRows != 1) {
						throw new SQLException("Problemas insertando compra");
					}

					// ELSE: insert correcto

				}
				queryString = "SELECT stock FROM Producto "
						+ "WHERE id=?";
				preparedStatement = connection
						.prepareStatement(queryString);

				/* Fill "preparedStatement". */
				preparedStatement.setString(1, par.getProducto().getId());
				/* Execute query. */
				rs = preparedStatement.executeQuery();
				
				rs.next();
				
				int stock = rs.getInt(1);
				
				
				/* Sea como sea actualizamos stock */
				queryString = "UPDATE Producto SET stock=? "
						+ "WHERE id=?";
				preparedStatement = connection
						.prepareStatement(queryString);

				/* Fill "preparedStatement". */
				preparedStatement.setInt(1, stock-par.getCantidad());
				preparedStatement.setString(2, par.getProducto().getId());
				/* Execute query. */
				int in = preparedStatement.executeUpdate();
				
				if(in != 1)
					throw new SQLException("Problemas actualizando stock");
			}
			/* Todo ha ido correctamente */
			return true;
		}
		/* Fallo */
		catch (SQLException e) {
			e.printStackTrace(System.err);
			return false;
		}

	}
}
